package org.dxy.infrastructure.persistent.db.mybatispuls.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseService;
import org.dxy.infrastructure.persistent.db.mybatispuls.po.ParamDefinitionPo;

import java.util.List;

/**
 * @description: 参数定义Service接口
 * @author: dxy
 * @createTime: 2025/1/21
 */
public interface ParamDefinitionService extends MPJBaseService<ParamDefinitionPo> {

    /**
     * 分页查询参数定义列表
     * @param page 分页参数
     * @param query 查询条件
     * @return 分页的参数定义列表
     */
    Page<ParamDefinitionPo> selectPageList(Page<ParamDefinitionPo> page, ParamDefinitionPo query);

    /**
     * 根据参数编码查询参数定义
     * @param code 参数编码
     * @return 参数定义
     */
    ParamDefinitionPo selectByCode(String code);

    /**
     * 根据输入类型查询参数定义列表
     * @param inputType 输入类型
     * @return 参数定义列表
     */
    List<ParamDefinitionPo> selectByInputType(String inputType);

    /**
     * 检查参数编码是否存在
     * @param code 参数编码
     * @param excludeId 排除的ID（用于更新时检查）
     * @return 存在的数量
     */
    int checkCodeExists(String code, Long excludeId);

    /**
     * 检查参数是否被工序参数配置引用
     * @param id 参数定义ID
     * @return 引用的数量
     */
    int checkParamUsage(Long id);

    /**
     * 批量删除参数定义
     * @param ids 参数定义ID列表
     * @return 删除的数量
     */
    int batchDeleteByIds(List<Long> ids);
}